package Day009_Map_斗地主_冒泡排序.demo04_TreeMap集合;

import java.util.Comparator;
import java.util.TreeMap;

/*
    TreeMap集合是Map接口的一个实现类是一种基于 红黑树 的实现,其特点为：
        1. 元素唯一
        2. 元素没有索引
        3. 使用元素的自然顺序对元素进行排序，或者根据创建 TreeMap 时提供的  Comparator 比较器 进行排序，具体取决于使用的构造方法：

    构造方法:
            TreeMap()：创建集合对象,根据其键的默认规则,对键值对进行排序
                              键所属的类通过实现Comparable比较器接口,重写接口中的compareTo方法,在该方法中指定默认排序规则
                          注意:
                              1.如果集合中的键类型为自定义类型,那么该类就必须实现Comparable接口,重写接口中的compareTo方法,
                                确认默认规则

            TreeMap(Comparator<E> comparator): 创建集合对象,根据指定的比较器进行排序
                //创建对象,指定规则,Comparator接口实现,匿名内部类
                TreeMap<Integer,String> map= new TreeMap<>(new Comparator<Integer>()
                通过Comparator接口实现规则
 */
public class TreeMap集合 {
    public static void main(String[] args) {

        //创建TreeMap集合,键的类型为Integer类型,值的类型为String
        TreeMap<Integer,String> map = new TreeMap<>();
        map.put(300,"张三");
        map.put(100,"李四");
        map.put(200,"王五");
        map.put(500,"赵六");
        map.put(400,"孙七");

        //根据其键的默认规则,对键值对进行排序 (升序)
        System.out.println(map); //{100=李四, 200=王五, 300=张三, 400=孙七, 500=赵六}

        //按照键的指定创建集合
        TreeMap<Integer,String> map2 = new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //指定规则
                return o2 - o1;
            }
        });

        map2.put(300,"张三");
        map2.put(100,"李四");
        map2.put(200,"王五");
        map2.put(500,"赵六");
        map2.put(400,"孙七");

        System.out.println(map2); //{500=赵六, 400=孙七, 300=张三, 200=王五, 100=李四}
    }
}
